package wahadlo.math;

/**
 * Klasa reprezentuje algorytm Podstawowej metody Eulera.
 * 
 * @author Koziołek
 * 
 */
public class Euler implements Algorithm {

	/**
	 * Pole przechowywuje wartość funkcji w punkcie n-1
	 */
	private Double old;

	/**
	 * krok
	 */
	private Double h;

	/**
	 * Do inicjalizacji obiektu potrzebne są dwie wartości pierwsza to wartość
	 * początkowa w punkcie 0, druga to delta funkcji.
	 * 
	 * @param old -
	 *            wartość początkowa w punkcie 0
	 * @param h -
	 *            krok
	 */
	public Euler(Double old, Double h) {
		this.old = old;
		this.h = h;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see wahadlo.math.Algorithm#getValue(wahadlo.math.Function,
	 *      java.lang.Double[])
	 */
	public Double getValue(Function function, Double... point) {
		// wartość funkcji w punkcie
		Double fucValue = function.getValue(point);
		// bierząca wartość
		Double current = old + h * fucValue;

		old = fucValue; // nowa wartość zostaje zapamiętana na potrzeby dalszych
		// obliczeń
		return current; // i zwrócona
	}

}
